<?php

namespace app\api\controller;

use think\App;

/**
 * AuthBase 需要登陆时继承
 *
 * Class AuthBase
 * @package app\api\controller
 */
class AuthBase extends ApiBase
{
    public $userId = 0;
    public $username = "";
    public $accessToken = "";
    public $isLogin = 3;

    /**
     * tp6中的构造方法，类似于 __construct 构造方法，区别在于此方法可以自动调用父类 initialize 方法
     */
    protected function initialize()
    {
        parent::initialize(); // TODO: Change the autogenerated stub

        if ($this->isLogin == 3) {   // 测试场景
            $this->userId = 3;
            return true;
        }

        // 获取页面 header 头中的 token 信息
        $this->accessToken = $this->request->header("access-token");
        // 判断 token 是否获取到和是否在 redis 中能查询到
        if (!$this->accessToken || !$this->isLogin()) {
            // 需要注意，在此方法中无法直接使用 show 方法，需要在父类中重写成手动抛出异常
            return $this->show(config("status.not_login"), "没有登陆");
        }
    }


    /**
     * 判断是否登录
     * @return bool
     */
    public function isLogin()
    {
        // 将页面传来的 token 在 redis 中进行查询
        // cache(): 查询缓存
        $userInfo = cache(config("redis.token_pre") . $this->accessToken);
        // 查询不到返回 false
        if (!$userInfo) {
            return false;
        }
        // 判断查询到的数据是否真实
        if (!empty($userInfo['id']) && !empty($userInfo['username'])) {
            // 将数据取出
            $this->userId = $userInfo['id'];
            $this->username = $userInfo['username'];
            return true;
        }
    }

}